
const { json } = require('express');
const express = require('express')
const app = express()
const path = require('path')

//设置中间件(处理跨域请求)
app.use((req, res, next) => {
  //console.log(req.headers.origin);//获取到请求的头信息，拿到请求地址
  //console.log(req.headers.token);//获取到token
  //可以设置一个请求地址池 只允许这些地址可以跨域
  const arrIp = ['http://127.0.0.1:5500', 'http://127.0.0.1:5502', 'http://127.0.0.1:5501']
  //es6提供一个新的数组方法includes()这个是查找数组中与第一个参数是匹配，如果匹配返回true,不返回false
  //
  if (arrIp.includes(req.headers.origin)) {
    //进行设置
    res.set('Access-Control-Allow-Origin', req.headers.origin) //*是允许所有的请求都可以跨域
    //允许复杂请求的跨域
    res.set('Access-Control-Allow-Headers', 'token')
  }
  //进行下一步
  next()
})

//cros跨域
app.get('/userCros', (req, res) => {
  const { token } = req.headers //请求头token解构赋值
  const { userId } = req.query//查询字符串解构赋值
  const data = { //模拟数据
    name: 'li',
    age: 18,
    sex: '男'
  }
  if (!token) {
    return res.send({
      code: 10002,
      mesage: '没有权限',
    })
  }
  if (userId !== '001') {
    return res.send({
      code: 10001,
      message: '获取失败',
      data: null
    })
  }
  res.send({
    code: 10000,
    message: '获取成功',
    data: data
  })
})

app.get('/user', (req, res) => {

  console.log(req.query);

  const { userId } = req.query
  if (userId !== '001') {
    return res.send({
      code: 10001,
      mes: '获取错误',
      data: null
    })
  }
  res.send({
    code: 10000,
    mes: '获取成功',
    data: null
  })
})

app.get('/getUser', (req, res) => {
  //获取到查询字符串进行结构赋值
  const { userId } = req.query
  const token = req.headers.token
  const data = {
    name: 'li',
    age: 18,
    sex: '男'
  }
  if (!token) {
    return res.send({
      code: 10002,
      message: '没有权限',
      data: null
    })
  }
  setTimeout(() => {
    if (userId !== '1') {
      return res.send({
        code: 10001,
        message: '获取失败',
        data: null
      })
    }
    res.send({
      code: 10000,
      message: '获取成功',
      data: data
    })
  }, 1500)
})

//jsonp请求
app.get('/userJson', (req, res) => {
  console.log(req.query);
  //后台拿到前台的查询字符串进行解构赋值
  const { callback } = req.query
  //后台响应数据
  const data = {
    code: 10000,
    message: '获取成功',
    data: {
      name: 'li',
      sex: '男'
    }
  }
  //进行响应
  //在这里以模板字符串进行一个响应
  //把后台响应的数据通过json字符串形式转
  //返回过去的就是函数调用cb(data)
  res.send(`${callback}(${JSON.stringify(data)})`)
})




app.get('/1', (req, res) => {
  const filePath = path.resolve(__dirname, './01.axios请求拦截器.html')
  res.sendFile(filePath)
})

app.get('/2', (req, res) => {
  const filePath = path.resolve(__dirname, './02.axios响应拦截器.html')
  res.sendFile(filePath)
})

app.get('/3', (req, res) => {
  const filePath = path.resolve(__dirname, './03.拦截器练习.html')
  res.sendFile(filePath)
})
app.get('/4', (req, res) => {
  const filePath = path.resolve(__dirname, './04.拦截器练习2.html')
  res.sendFile(filePath)
})
app.get('/5', (req, res) => {
  const filePath = path.resolve(__dirname, './05.取消请求.html')
  res.sendFile(filePath)
})
app.listen(8100, () => {
  console.log('服务器启动成功,请访问http://127.0.0.1:8100');
})